package cn.tedu.search.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;

// 商品类
@Data
@Accessors(chain = true)
@AllArgsConstructor  //生成全参构造
@NoArgsConstructor   //生成无参构造
// SpringData要求我们在实体类中使用特定的注解标记类和属于
// @Document注解对应ES索引名称
// 当操作这个索引时,如果索引不存在,会自动创建这个索引
@Document(indexName = "items")
public class Item implements Serializable {

    //SpringData标记当前索引主键的注解@Id
    @Id
    private Long id; //商品ID

    // SpringData使用@Field标记文档中的属性类型和各种特征
    @Field(type = FieldType.Text,
            analyzer = "ik_max_word",
            searchAnalyzer = "ik_max_word")
    private String title;  //商品名称

    // ES中的keyword类型的数据是不分词的字符串 Text是分词的字符串
    @Field(type = FieldType.Keyword)
    private String category;  //分类

    @Field(type = FieldType.Keyword)
    private String brand;  //品牌

    @Field(type = FieldType.Double)
    private Double price;  //价格

    // 图片地址不会成为所搜条件,设置index = false
    // 所以不需要将图片地址也创建索引表,能节省空间
    @Field(type = FieldType.Keyword,index = false)
    private String imagePath;  //图片地址

}
